As the value and use of information continues to increase, individuals and businesses seek additional ways to process and store information. One option available to users is information handling systems. An information handling system generally processes, compiles, stores, and/or communicates information or data for business, personal, or other purposes thereby allowing users to take advantage of the value of the information. Because technology and information handling needs and requirements vary between different users or applications, information handling systems may also vary regarding what information is handled, how the information is handled, how much information is processed, stored, or communicated, and how quickly and efficiently the information may be processed, stored, or communicated. The variations in information handling systems allow for information handling systems to be general or configured for a specific user or specific use such as financial transaction processing, airline reservations, enterprise data storage, or global communications. In addition, information handling systems may include a variety of hardware and software components that may be configured to process, store, and communicate information and may include one or more computer systems, data storage systems, and networking systems.
Information handling systems often use an array of storage resources, such as a Redundant Array of Independent Disks (RAID), for example, for storing information. Arrays of storage resources typically utilize multiple disks to perform input and output operations and can be structured to provide redundancy which may increase fault tolerance. Other advantages of arrays of storage resources may be increased data integrity, throughput and/or capacity. In operation, one or more storage resources disposed in an array of storage resources may appear to an operating system as a single logical storage unit or “logical unit.” Implementations of storage resource arrays can range from a few storage resources disposed in a server chassis, to hundreds of storage resources disposed in one or more separate storage enclosures.
Many storage arrays enable redundancy by “mirroring,” in which an exact copy of data on one logical unit is copied onto one or more other logical units. One of the challenges associated with providing redundancy in storage arrays, particularly in mirrored storage arrays such as RAID 1 arrays, is maintaining the synchronization of data between a logical unit including “original” data, and the one or more logical units including the mirrored data. Ideally, anytime a data write is made to the logical unit including the original data, a write should also be instantaneously made to the logical units including the mirrored data, so as to maintain one-to-one correspondence between logical units, thereby providing the greatest level of data integrity.
In order to provide maximum data integrity, traditional approaches to ensuring data integrity in a mirrored storage array often sacrifice speed and performance. To illustrate, many hard disk drives making up logical units include a write cache. Write caches are often used to increase access to data. Such data may created when a host operating system stores data on a logical unit including permanent data storage. Rather than immediately store the data onto a storage resource's non-volatile storage (e.g., hard disk drives), for example, the storage resource's controller may store the data into its high-speed cache and signal to the host operating system that the data has been successfully stored. This significantly speeds up the acknowledgment back to the host operating system that the data has been successfully stored. Then, when it is convenient to the data storage system, the data in the write cache is flushed to the hard drive, where it becomes “permanently” stored.
Until the write cache data is actually stored on the hard disk drive, it remains “dirty.” The term “dirty” indicates that write cache data has yet to be written to permanent data storage. Because most, if not all, write cache memories are volatile memories that need electric power in order to store data, this data is vulnerable to being permanently lost if there is a power outage or other power event (e.g., sleep mode and/or standby).
Because write caches often include volatile memory that loses data when powered down, and because modern storage controllers are often unable to distinguish between writes to a drive and writes to a drive's write cache, write caches are not often employed in mirrored storage arrays. To illustrate, consider a mirrored storage array including two hard disk drives, Drive A and Drive B, in which Drive B serves as the mirror to Drive A, and Drive B includes an enabled write cache. If data written to Drive A is to be mirrored on Drive B, such data may first be written to Drive B's write cache prior to being transferred to the non-volatile storage of Drive B. If an event occurs causing loss of power to Drive B or its write cache, data stored in Drive B's write cache and not yet written to the non-volatile storage of Drive B may be lost, thus leaving Drive B out of synchronization with Drive A, and placing data integrity at risk. Thus, in certain instances, information handling system firmware may “think” certain data has been mirrored to Drive B, when in fact such data was lost from Drive B's write cache during a power event. This problem may occur not only in the event of a power-down of an information handling system comprising Drive B, but may also occur as a result of any power event (e.g., a “sleep mode” or “standby mode”), as modern storage controllers are often unable to distinguish between various power events.